#include "bsp_iwdg.h"

static uint32_t LsiFreq = 114000; // 看门狗输入时钟 LSI频率

/**
 * @brief  uart 串口发送数据
 * @param  iwdg_time 看门狗复位时间，单位ms
 * @return NONE
 * @note  计数时间(s) = 重装值 / （LSI / 分频）; 反推重：装载值 = 计数时间(s) * LSI / 分频;
 */
void bsp_iwdg_init(uint32_t iwdg_time)
{
	if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET) // 检查系统是否从IWDG复位中恢复
		RCC_ClearFlag();							  // 清除重置标志

	IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);	 // 使能对 IWDG_PR和 IWDG_RLR寄存器的写访问
	IWDG_SetPrescaler(IWDG_Prescaler_32);			 // 设置分频系数
	IWDG_SetReload(iwdg_time * LsiFreq / 32 / 1000); // 设置重装载计数器值,此处除的分频值要对应设置的分频系数
	IWDG_ReloadCounter();							 // 重装载看门狗计数器

	IWDG_Enable();
}

void bsp_feed_dog(void)
{
	IWDG->KR = ((uint16_t)0xAAAA);
}
